//<script> Compra
var storeComboProveedores = Ext.create('Ext.data.JsonStore',{
    proxy: {
        type:'ajax',
        actionMethods:{read:'POST'},
        api:{read: BASE_URL+'proveedores/listar'},
        reader:{type: 'json',root: 'data',totalProperty: 'total',idProperty: 'name'}
    },
    fields: ['id','nombre'],
    autoLoad:true
});
var labelWith = 120;
var simpleCombo = Ext.create('Ext.form.field.ComboBox', {
    name: 'proveedor_id',
    valueField: 'id',
    fieldLabel: 'Proveedor',
    displayField: 'nombre',
    labelWidth: labelWith,
    emptyText:'Seleccione un proveedor',
    store: storeComboProveedores,
    editable: true,
    typeAhead: true,
    queryMode: 'local',
    allowBlank: false
});
var campoFecha = Ext.create('Ext.form.field.Date',{
    name:'fecha',
    fieldLabel:'Fecha de Compra',
    labelWidth: labelWith,
    emptyText:'Indique fecha',
    maxValue: new Date(),
    allowBlank: false
});
var campoFactura = Ext.create('Ext.form.field.Text',{
    name:'factura',
    fieldLabel:'Factura Nº',
    labelWidth: labelWith,
    allowBlank: false,
    emptyText: 'Código de factura'
});
var storeCompraProductos = Ext.create('Ext.data.Store',{
    fields:[
        {name:'cant',          type:'int'},
        {name:'producto_id',   type:'int'},
        {name:'producto_nombre',   type:'string'},
        {name:'costo',         type:'int'},
        {name:'importe',       type:'int'}
    ],
    listeners:{
        create:function(data){
            storeCompraProductos.insert(0,data);
            var total = 0;
            storeCompraProductos.each(
                function(record){
                    total+=record.get('importe');
                }
            );
            Ext.getCmp('gridpanel_Compras_add').getSelectionModel().deselectAll(true);
            subtotal.setValue(total);
            cancelado.setMaxValue(total);
        }
    }
});

var subtotal = Ext.create('Ext.form.field.Text',{
    fieldLabel:'Total',
    name:'total',
    labelWidth: labelWith,
    readOnly:true,
    emptyText: 'Total',
    allowBlank: false
});

var cancelado = Ext.create('Ext.form.field.Number',{
    name:'cancelado',
    fieldLabel:'Monto Cancelado',
    labelWidth: labelWith,
    allowBlank: false,
    emptyText: 'Monto',
    minValue: 1,
    hideTrigger: true,
    keyNavEnabled: false,
    mouseWheelEnabled: false,
    decimalSeparator:'.'
});

<?php if(!empty($idCompra)){ ?>

simpleCombo.setReadOnly(true);
campoFecha.setReadOnly(true);
campoFactura.setReadOnly(true);
subtotal.setReadOnly(true);
cancelado.setReadOnly(true);

simpleCombo.setValue(<?php echo $proveedor_id?>);
campoFecha.setValue('<?php echo $fecha?>');
campoFactura.setValue('<?php echo $factura?>');
subtotal.setValue('<?php echo $total?>');
cancelado.setValue('<?php echo $cancelado?>');

storeCompraProductos.loadData(<?php echo $productos?>);

<?php } ?>
Ext.create('Ext.Window', {
    title:'<?php echo $title?>',
    layout: 'fit',
    width: 550,
    height: 480,
    modal: true,
    items: [
        Ext.create('Ext.panel.Panel',{
            layout: 'border',
            items:[
                {
                    region:'north',
                    xtype:'form',
                    id:'compra_form_datos_proveedor',
                    bodyPadding: 10,
                    defaultType: 'textfield',
                    items: [simpleCombo,campoFecha,campoFactura]
                },
                {
                    region:'center',
                    title:'Lista de Productos',
                    layout: 'fit',
                    items:[
                        {
                            xtype:'gridpanel',
                            id:'gridpanel_Compras_add',
                            store:storeCompraProductos,
                            selModel: Ext.create('Ext.selection.CheckboxModel'),
                            columns: [
                                {xtype: 'rownumberer'},
                                {header: 'Cant.',dataIndex: 'cant',field: {xtype: 'textfield',allowBlank: false},width:40},
                                {header: 'Descripción',dataIndex: 'producto_nombre',field: {xtype: 'textfield',allowBlank: false}, flex: 1},
                                {header: 'P. Uni.',dataIndex: 'costo',field: {xtype: 'textfield',vtype: 'email',allowBlank: true},width:60},//
                                {header: 'Importe',dataIndex: 'importe'},
                            ]
                            <?php if(empty($idCompra)){ ?>
                            ,tbar:[
                                {
                                    xtype:'button',
                                    text:'Agregar Producto',
                                    handler:function(){
                                        requestView(
                                            BASE_COMPRAS + 'addProducto'
                                            ,{updateGrid:'gridpanel_Compras_add'}
                                        );
                                    }
                                },
                                {
                                    xtype:'button',
                                    text:'Eliminar Producto',
                                    handler:function(){
                                        var grid = this.up('gridpanel');
                                        grid.getStore().remove(grid.getSelectionModel().getSelection());
                                        Ext.getCmp('compra_subtotal').setValue(0);
                                    }
                                },
                            ]
                            <?php } ?>
                        }
                    ]
                },
                {
                    region:'south',
                    title:'SubTotales',
                    xtype:'form',
                    id:'compra_form_totales',
                    bodyPadding: 10,
                    items:[subtotal,cancelado]
                }
            ]
            <?php if(empty($idCompra)){ ?>
            ,bbar:{
                items:[
                    '->',
                    {
                        xtype:'button',
                        text:'Registrar Compra',
                        handler:function(){
                            var btn = this;
                            Ext.MessageBox.confirm(
                                'Confirmar',
                                '¿Esta seguro de registar la compra?, luego no podra modificarla ni elimnarla.',
                                function(opcion){
                                    if(opcion.toUpperCase() == 'YES'){
                                        //Fromulario de Datos del Proveedor
                                        var formDatosProveedor = Ext.getCmp('compra_form_datos_proveedor').getForm();
                                        var band = formDatosProveedor.isValid();

                                        //Store
                                        var storeCount = storeCompraProductos.getCount();
                                        if(band && storeCount < 1){
                                        band=false;
                                        Ext.MessageBox.show({
                                            title: 'ERROR',
                                            msg: 'Debe agregar al menos un producto.',
                                            icon: Ext.MessageBox.ERROR,
                                            buttons: Ext.Msg.OK
                                        });
                                        }
                                        //Formulario de Totales
                                        var formDatosPago = Ext.getCmp('compra_form_totales').getForm();
                                        if(band && !formDatosPago.isValid()){
                                            band=false;
                                        }

                                        if(band){
                                            var arr = [];
                                            storeCompraProductos.each(function(rec,index){
                                                arr[index] = rec.data
                                            });
                                            Ext.Ajax.request({
                                                url: BASE_COMPRAS + 'save',
                                                method:'POST',
                                                params:{
                                                    formDatosProveedor : Ext.encode(formDatosProveedor.getValues()),
                                                    productos : Ext.encode(arr),
                                                    formDatosPago : Ext.encode(formDatosPago.getValues())
                                                },
                                                success: function(response,options){
                                                    var rsp = scriptEvaluator(response.responseText);
                                                    var icono = Ext.MessageBox.INFO;
                                                    if(!rsp.exito){
                                                        icono = Ext.MessageBox.ERROR;
                                                    }
                                                    Ext.MessageBox.show({
                                                        title: 'Exito',
                                                        msg: rsp.msj,
                                                        icon: icono,
                                                        buttons: Ext.Msg.OK
                                                    });
                                                },
                                                failure: function(response,options){
                                                    Ext.MessageBox.show({
                                                        title: 'ERROR',
                                                        msg: 'Ha ocurrido un error durante la conexión. Por favor intente de nuevo.',
                                                        icon: Ext.MessageBox.ERROR,
                                                        buttons: Ext.Msg.OK
                                                    });
                                                },
                                                scope:this
                                            });
                                            btn.up('window').destroy();
                                            Ext.getCmp('<?php echo $idTab?>').getStore().load();
                                        }
                                    }
                                }
                            );
                        }
                    },
                ]
            }
            <?php } ?>
        })
    ]
}).show();
